import axios from "axios";
import NProgress from "nprogress";  // 进度条
import "nprogress/nprogress.css";
import store from "@/store";   // 进度条样式
// 创建axios实例
const request = axios.create({
	baseURL: `${process.env.VUE_APP_API}/api`,
	timeout: '5000'
})
// 请求拦截器
request.interceptors.request.use(
	(config) => {
		// 开启进度条
		NProgress.start()
		
		// 获取游客用户的唯一标识
		const userTempId = store.state.user.tempId;
		// 每次发送请求通过请求头携带游客用户唯一标识
		config.headers.userTempId = userTempId
		// 每次发送请求通过请求头携带登录用户唯一标识
		config.headers.token = store.state.user.token
		
		return config
	},
	(error) => {
		return Promise.reject(error)
	}
)

// 响应拦截器
request.interceptors.response.use(
	(response) => {
		//关闭进度条
		NProgress.done();
		//对于我们的成功来说,不但响应状态码是200,并且请求回来的数据中的后端给的code码也是200才可以
		//举个例子:登录的时候返回密码错误,但是响应状态码是200,但是数据中code是207,这就不是我们想要的
		if (response.data.code === 200) {
			//当拿到我们想要的数据后,直接返回想要的数据(response.data只是后台返回的整体数据,我们想要的数据在response.data.data)
			return response.data.data
		}
		return Promise.reject({message: response.data.message})
	},
	(error) => {
		//关闭进度条
		NProgress.done();
		return Promise.reject(error)
	}
)

export default request